#ifndef _CUPE_STM32_H
#define _CUPE_STM32_H

#include <Arduino.h>

#include <SPI.h>
#include <GxTFT.h>
#include <GxIO/STM32MICRO/GxIO_STM32F1_FSMC/GxIO_STM32F1_FSMC.h>
#include <GxCTRL/GxCTRL_ILI9327/GxCTRL_ILI9327.h>

extern GxTFT tft;
// extern GxIO_Class io;
// extern GxCTRL_Class controller(io);

#define DEBUG_ON 1
#if DEBUG_ON == 1
#include <stdio.h>
#define dbLog(fmt, ...) Serial1.printf(fmt, ##__VA_ARGS__)
#else
#define dbLog(fmt, ...)
#endif

// 以下为酷贝引脚定义
#define PWR_EN PE0 // 供电使能
#define PWR_BTN PE1 // 电源按钮

#define BAT_VOL PC0 // 电池电压
#define PWR_VOL PC1 // 电源电压

#define TONE_PIN PB1 // 蜂鸣器
// TM1668
#define KEY_STB PE2 // 按键选通
#define KEY_CLK PE3 // 按键时钟
#define KEY_DIO PE4 // 按键数据
// ILI9327 FSMC显示
#define FSMC_NE1 PD7  // 选中
#define FSMC_RS PD11  // 命令类型
#define FSMC_NWE PD5  // 写开关
#define FSMC_NOE PD4  // 读开关
#define LCD_BL PC8    // 背光
#define LCD_RESET PC9 // 复位
// FM17522 IC卡读写器
#define MF522_CS PA1   // 选中
#define MF522_IRQ PB0  // 中断
#define MF522_SCK PB3  // 时间
#define MF522_MISO PB4 // 输出
#define MF522_MOSI PB5 // 输入
#define MF522_NPD PB6  // 复位
// PCF8563 实时钟
#define RTC_INT PB7 // 中断
#define RTC_SCL PB8 // 时钟
#define RTC_SDA PB9 // 数据
// W25Q64 储存器
#define FLASH_CS PA4   // 选中
#define FLASH_SCK PA5  // 时钟
#define FLASH_MISO PA6 // 输出
#define FLASH_MOSI PA7 // 输入
// W25Qxx 空
#define FLASH2_CS PB12   // 选中
#define FLASH2_SCK PB13  // 时钟
#define FLASH2_MISO PB14 // 输出
#define FLASH2_MOSI PB15 // 输入
// 动态NFC_TAG M24SR04
// 2-3 天线 4，8 VCC 4 VSS(GND)
#define M24_SCL PB10 // 6 SCL
#define M24_SDA PB11 // 5 SDA
#define M24_INT PD12 // 7 GPO
#define M24_RF_CS PC7 // 1 RFDisable
#define M24_ADDR 0x56
// LKT4201 加密芯片
#define LKT_TX PC10
#define LKT_RX PC11
#define LKT_CLK PC12
#define LKT_RST PC13

#define USB_EN PA8 // USB使能

#define KEY_NONE 0
#define KEY_D 1
#define KEY_LOCK 2
#define KEY_X 3
#define KEY_LEFT 4
#define KEY_OK 5
#define KEY_NUM_2 6
#define KEY_B 7
#define KEY_NUM_5 8
#define KEY_NUM_8 9
#define KEY_NUM_0 10

#define KEY_C 11
#define KEY_NUM_3 12
#define KEY_NUM_6 13
#define KEY_NUM_9 14
#define KEY_HASH 15
#define KEY_NUM_1 16
#define KEY_A 17
#define KEY_NUM_4 18
#define KEY_NUM_7 19
#define KEY_STAR 20

extern const char cupeButtons[];

/**
 * 酷贝stm32初始化
*/
void cupe_init(void);

/**
 * 检查酷贝stm32关机键是否按下
*/
int cupe_power_key(void);

/**
 * 酷贝stm32关机
*/
void cupe_shutdown(void);

/**
 * 读取酷贝stm32面板按键
*/
uint8_t cupe_key();

#endif